import java.util.Arrays;
import java.util.Scanner;

/**
 * @author gao
 * @date 2025/6/26 13:03
 */

public class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 定义三个指针，p1指向nums1的最后一个元素，p2指向nums2的最后一个元素，p指向nums1的最后一个位置
        int p1 = m - 1, p2 = n - 1, p = m + n - 1;
        // 当p1和p2都大于等于0时，比较nums1[p1]和nums2[p2]的大小
        while (p1 >= 0 && p2 >= 0) {
            // 如果nums1[p1]大于等于nums2[p2]，则将nums1[p1]赋值给nums1[p]，并将p1和p都减1
            if (nums1[p1] >= nums2[p2]) {
                nums1[p--] = nums1[p1--];
                // 否则，将nums2[p2]赋值给nums1[p]，并将p2和p都减1
            } else {
                nums1[p--] = nums2[p2--];
            }
        }
        // 如果p2大于等于0，则将nums2中的元素依次赋值给nums1
        while (p2 >= 0) {
            nums1[p--] = nums2[p2--];
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int m = in.nextInt();
            int n = in.nextInt();

            int[] nums1 = new int[m + n];
            int[] nums2 = new int[n];

            for (int i = 0; i < m + n; i++) {
                nums1[i] = in.nextInt();
            }
            for (int i = 0; i < n; i++) {
                nums2[i] = in.nextInt();
            }

            Solution solution = new Solution();
            solution.merge(nums1, m, nums2, n);
            System.out.println(Arrays.toString(nums1));
        }
    }
}